]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
global: Add session-mode property
authorFlorian Müllner <fmuellner@gnome.org>
Wed, 16 May 2012 21:11:57 +0000 (23:11 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Tue, 22 May 2012 17:42:27 +0000 (19:42 +0200)
Add a session-mode property on ShellGlobal which corresponds to the
new --mode switch. Make the existing ShellGlobal:session-type property
readonly and base it on ShellGlobal:session-mode to avoid conflicts.

https://bugzilla.gnome.org/show_bug.cgi?id=676156

src/main.c
src/shell-global.c
src/shell-global.h

index b19ff29635304c01066336c2dabf39db44158c79..bd3b128b015d25163e1e853aaf1a38ffab45c2a1 100644 (file)
@@ -277,7 +277,6 @@ main (int argc, char **argv)
 {
   GOptionContext *ctx;
   GError *error = NULL;
-  ShellSessionType session_type;
   int ecode;
   TpDebugSender *sender;
 
@@ -331,14 +330,10 @@ main (int argc, char **argv)
   g_log_set_default_handler (default_log_handler, sender);
 
   /* Initialize the global object */
-  if (g_strcmp0 (session_mode, "gdm") == 0)
-      session_type = SHELL_SESSION_GDM;
-  else if (is_gdm_mode)
-      session_type = SHELL_SESSION_GDM;
-  else
-      session_type = SHELL_SESSION_USER;
-
-  _shell_global_init ("session-type", session_type, NULL);
+  if (session_mode == NULL)
+    session_mode = is_gdm_mode ? "gdm" : "user";
+
+  _shell_global_init ("session-mode", session_mode, NULL);
 
   ecode = meta_run ();
 
index be14fa3b212672859cd0ff98fa9badd3524eab1e..01950190cf31b57808215ed528f727224ae77343 100644 (file)
@@ -59,7 +59,7 @@ struct _ShellGlobal {
   MetaScreen *meta_screen;
   GdkScreen *gdk_screen;
 
-  ShellSessionType session_type;
+  char *session_mode;
 
   /* We use this window to get a notification from GTK+ when
    * a widget in our process does a GTK+ grab.  See
@@ -98,6 +98,7 @@ enum {
   PROP_0,
 
   PROP_SESSION_TYPE,
+  PROP_SESSION_MODE,
   PROP_OVERLAY_GROUP,
   PROP_SCREEN,
   PROP_GDK_SCREEN,
@@ -143,8 +144,9 @@ shell_global_set_property(GObject         *object,
     case PROP_STAGE_INPUT_MODE:
       shell_global_set_stage_input_mode (global, g_value_get_enum (value));
       break;
-    case PROP_SESSION_TYPE:
-      global->session_type = g_value_get_enum (value);
+    case PROP_SESSION_MODE:
+      g_clear_pointer (&global->session_mode, g_free);
+      global->session_mode = g_ascii_strdown (g_value_get_string (value), -1);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -165,6 +167,9 @@ shell_global_get_property(GObject         *object,
     case PROP_SESSION_TYPE:
       g_value_set_enum (value, shell_global_get_session_type (global));
       break;
+    case PROP_SESSION_MODE:
+      g_value_set_string (value, shell_global_get_session_mode (global));
+      break;
     case PROP_OVERLAY_GROUP:
       g_value_set_object (value, meta_get_overlay_group_for_screen (global->meta_screen));
       break;
@@ -349,7 +354,14 @@ shell_global_class_init (ShellGlobalClass *klass)
                                                       "The type of session",
                                                       SHELL_TYPE_SESSION_TYPE,
                                                       SHELL_SESSION_USER,
-                                                      G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+                                                      G_PARAM_READABLE));
+  g_object_class_install_property (gobject_class,
+                                   PROP_SESSION_MODE,
+                                   g_param_spec_string ("session-mode",
+                                                        "Session Mode",
+                                                        "The session mode to use",
+                                                        "user",
+                                                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
   g_object_class_install_property (gobject_class,
                                    PROP_OVERLAY_GROUP,
                                    g_param_spec_object ("overlay-group",
@@ -1802,5 +1814,14 @@ shell_global_get_session_type (ShellGlobal  *global)
   g_return_val_if_fail (SHELL_IS_GLOBAL (global),
                         SHELL_SESSION_USER);
 
-  return global->session_type;
+  return strcmp (global->session_mode, "gdm") == 0 ? SHELL_SESSION_GDM
+                                                   : SHELL_SESSION_USER;
+}
+
+const char *
+shell_global_get_session_mode (ShellGlobal *global)
+{
+  g_return_val_if_fail (SHELL_IS_GLOBAL (global), "user");
+
+  return global->session_mode;
 }
index 5a39e79e2e2ca9b1ac32df875161600eaa6dbaf5..908ec9e0277f5237dd616f59a8c759e440d47f25 100644 (file)
@@ -147,6 +147,7 @@ typedef enum {
 } ShellSessionType;
 
 ShellSessionType shell_global_get_session_type  (ShellGlobal  *global);
+const char *     shell_global_get_session_mode  (ShellGlobal  *global);
 
 G_END_DECLS